package com.meida.module.bus.provider.api.service;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.meida.module.bus.client.entity.BusMaterialPlan200;
import com.meida.module.bus.client.entity.BusMaterialSrmSub;
import com.meida.module.bus.client.entity.srmapi.basedata.SrmPurchaseorderdetail;
import com.meida.module.bus.provider.api.util.ApiConstants;
import com.meida.module.bus.provider.api.util.PmsToolUtil;
import com.meida.module.bus.provider.service.BusMaterialPackage200Service;
import com.meida.module.bus.provider.service.BusMaterialPlan200Service;
import com.meida.module.bus.provider.service.BusMaterialSrmSubService;
import com.meida.module.bus.provider.service.srmservice.SrmSqlserCommonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


@Service
@RefreshScope
@Transactional(rollbackFor = Exception.class)
public class SyncPriceService {

    @Autowired
    private BusMaterialPackage200Service package200Service;
    @Autowired
    private BusMaterialPlan200Service plan200Service;
    @Autowired
    private BusMaterialSrmSubService srmSubService;
    @Autowired
    private SrmSqlserCommonService sqlserCommonService;

    /**
     * 材料/分包-SRM价格同步
     *
     * @param projectId 项目ID
     * @param kind      0 材料 1 分包
     * @return 0 成功 1 失败
     */
    public int syncPriceFromSrmForPlanDate(Long projectId, int kind) {
        Map<String, Object> searchMap = Maps.newHashMap();
        searchMap.put(ApiConstants.MAP_PROJECTID, projectId);
        searchMap.put(ApiConstants.MAP_PARENTID, 0);
        Collection<BusMaterialPlan200> busMaterialPlan200s = plan200Service.listByMap(searchMap);
        if (0 != busMaterialPlan200s.size()) {
            // key 材料计划主key value
            Map<Long, Long> syncIdMap = Maps.newHashMap();
            List<Long> syncIdList = Lists.newArrayList();
            //  200版本的所有【材料】父级节点数据，
            busMaterialPlan200s.stream().forEach(plan200Obj -> {
                //  1：有对应的100版本数据
                if (PmsToolUtil.checkLong(plan200Obj.getPackagePlan100Id())) {
                    syncIdMap.put(plan200Obj.getPackagePlan100Id(), plan200Obj.getMaterialPlanId());
                    syncIdList.add(plan200Obj.getPackagePlan100Id());
                } else {
                    //  2：无对应的100版本数据
                    syncIdMap.put(plan200Obj.getMaterialPlanId(), 0L);
                    syncIdList.add(plan200Obj.getPackagePlan100Id());
                }
            });

            Map<Long, BigDecimal> syncPriceMap = Maps.newHashMap();
            //  获取100、200版本对应的SRM关联表数据。
            if(0 < syncIdList.size()) {
                syncIdList.stream().forEach(syncId->{
                    Map<String, Object> filterMap = Maps.newHashMap();
                    filterMap.put(ApiConstants.MAP_MATERIALPLANID, syncId);
                    Collection<BusMaterialSrmSub> srmSubs = srmSubService.listByMap(filterMap);
                    // 一行PMS计划明细，可以对应多条SRM采购订单明细
                    if(0 < srmSubs.size()) {
                        List<Long> srmDetailIdsAll = Lists.newArrayList();
                        // 读取对应采购明细id，对应的价格数据。
                        srmSubs.stream().forEach(srmSubObj->{
                            srmDetailIdsAll.add(srmSubObj.getPurchaseorderDetailid());
                        });
                        List<Long> srmDetailIds = srmDetailIdsAll.stream().distinct().collect(Collectors.toList());
                    }
                });
//
            }
        }

        //【材料价格同步】
        //  200版本的所有【材料】父级节点数据，
        //  1：有对应的100版本数据
        //  2：无对应的100版本数据

        //  获取100、200版本对应的SRM关联表数据。
        //  读取对应采购明细id，对应的价格数据。
        //  反写会母表价格

        // 同步SRM的价格逻辑
        //【SRM材料价格】同步到PMS母表的【预算成本单价_未税_主材价格】
        //->重新计算【预算成本单价_未税_综合单价】、
        //【预算成本合价_未税_主材价】、
        //【预算成本合价_未税_合计】

        //【SRM分包价格】同步到PMS母表的【预算成本单价_未税_安装价格】
        //->重新计算【预算成本单价_未税_综合单价】、
        //【预算成本合价_未税_安装价】、
        //【预算成本合价_未税_合计】

        return ApiConstants.COMMON_RESULT_ZERO;
    }

}
